Real, European champions 13 times and three years in a row from 2016-18, failed to muster a shot on target and suffered their first defeat of the season.
PSG lead the standings on three points, ahead of Club Brugge and Galatasaray, who played out a goalless draw earlier on Wednesday.
"We lacked intensity, we never got into the game, we created very few chances," Real coach Zinedine Zidane told a news conference. Although PSG's win could be seen as a statement, the French champions still have a long way to go before putting three consecutive last-16 eliminations behind them for good including last season's embarrassing defeat by Manchester United.
"We played at a very very high level tonight, but it's not easy to show this in every game," said PSG coach Thomas Tuchel. With Neymar suspended and Mbappe and Cavani injured, Argentine Mauro Icardi started up front after playing his first half hour for PSG in a Ligue 1 game against Strasbourg last weekend.
He had little impact, though, as Di Maria made sure his compatriot's lack of match time went unnoticed in PSG's first European game since a shock 3-1 home defeat by United sent them out of last season's Champions League.
Eden Hazard started for Real, who eliminated PSG in the last 16 in 2017-18, and they were also without the injured Marcelo, Isco, Luka Modric, Marco Asensio and Fede Valverde as well as the suspended Sergio Ramos and Nacho Fernandez.
PSG started fast and were rewarded for their early domination in the 14th minute when Di Maria stabbed the ball past Thibaut Courtois at the near post from Juan Bernat's cross.
It was former Real player Di Maria's 25th goal in his 100th appearance in European competition. He made it 26 in the 33rd minute, curling a superb shot past Courtois from 20 metres after Idrissa Gueye had cut through the Real midfield.